package com.cmict.data.bpm.service.message;


import com.cmict.data.framework.common.pojo.PageResult;
import com.cmict.data.bpm.controller.admin.definition.vo.task.TaskVariablePageReqVO;
import com.cmict.data.bpm.dal.dataobject.task.TaskCarbonDO;
import com.cmict.data.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
import com.cmict.data.bpm.service.message.dto.TaskCarbonCreateReqDTO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 流程用户消息 Service 接口
 *
 * @author liutao
 */
public interface UserMessageListService {

    /**
     * 创建流程用户消息
     *
     * @param createReqDTO 创建信息
     * @return 编号
     */
    Long createUserMessageList(@Valid TaskCarbonCreateReqDTO createReqDTO);

    /**
     * 获得流程用户消息列表
     *
     * @param userId
     * @return 流程用户消息列表
     */
    List<TaskCarbonDO> getUserMessageListList(Long userId);

    /**
     * 完成抄送任务
     * @param carbonId
     * @return
     */
    boolean completeTask(Long carbonId);

    int deleteCarbonTask(Long carbonId);

    /**
     * 流程被驳回
     * @param reqDTO
     */
    void sendMessageWhenTaskRejected(BpmMessageSendWhenTaskCreatedReqDTO reqDTO);

    /**
     * 发送任务被分配的消息
     *
     * @param reqDTO 发送信息
     */
    void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO);

    /**
     * 流程审批完成，发送消息给流程申请人
     * @param reqDTO
     */
    void sendMessageWhenProcessCompleted(BpmMessageSendWhenTaskCreatedReqDTO reqDTO);

    /**
     * 流程未通过，发送消息给流程申请人
     * @param reqDTO
     */
    void sendMessageWhenProcessCancel(BpmMessageSendWhenTaskCreatedReqDTO reqDTO);

    void sendMessageWhenTaskCarbon(BpmMessageSendWhenTaskCreatedReqDTO reqDTO);

    PageResult<TaskCarbonDO> selectPage(TaskVariablePageReqVO pageReqVO);

    void batchDeleteCarbon(Collection<Long> ids);
}
